package com.yunhe.abnormal.repository.base;

import com.yunhe.abnormal.domain.base.AlarmRule;
import com.yunhe.common.model.PageParam;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 异常规则Session实现类
 * @author liuronglei
 */
public interface AlarmRuleSession {

    /**
     * 根据条件获得异常规则列表
     * @param queryStr 关键字
     * @param stationTypeId 电站类型ID
     * @param stationId 电站ID
     * @param alarmLevelId 异常级别ID
     * @param deviceTypeId 设备类型ID
     * @param alarmTypeId 异常类型ID
     * @param alarmScopeId 作用范围ID
     * @param formula 公式
     * @param dtime 维护时间
     * @param pageParam 分页对象
     */
    Page<AlarmRule> findByCondition(String queryStr,
                                    List<Long> stationTypeId,
                                    List<Long> stationId,
                                    List<Long> alarmLevelId,
                                    List<Long> deviceTypeId,
                                    List<Long> alarmTypeId,
                                    Long alarmScopeId,
                                    String formula,
                                    List<Long> dtime,
                                    PageParam pageParam);

    /**
     * 批量更新异常规则级别
     * @param ids 异常规则ID
     * @param alarmLevelId 异常级别ID
     */
    void updateAlarmLevel(List<Long> ids, Long alarmLevelId);

    /**
     * 解绑异常规则所有关系
     * @param alarmRuleId 异常规则ID
     */
    void unBindRelat(Long alarmRuleId);

    /**
     * 绑定异常规则所有关系
     * @param alarmRule 异常规则对象
     */
    void bindRelat(AlarmRule alarmRule);

    /**
     * 获得绑定为全部电站的规则
     * @param stationTypeId 电站类型ID
     * @param alarmScopeId 作用范围ID
     */
    List<AlarmRule> noStationBind(Long stationTypeId, Long alarmScopeId);

    /**
     * 获得电站绑定的规则
     * @param stationId 电站ID
     */
    List<AlarmRule> getStationBind(Long stationId);

    /**
     * 获得绑定为全部设备的规则
     * @param deviceTypeId 设备类型ID
     * @param alarmScopeId 作用范围ID
     */
    List<AlarmRule> noDeviceBind(Long deviceTypeId, Long alarmScopeId);

    /**
     * 获得电站绑定的规则
     * @param deviceId 设备ID
     */
    List<AlarmRule> getDeviceBind(Long deviceId);
}
